# flake8: noqa

import jieba.analyse
from bisheng_langchain.chat_models import QwenChat
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

model_name = 'Qwen-7B-Chat'
host_base_url = 'http://192.168.106.12:9001/v2.1/models'
llm = QwenChat(model_name=model_name,
               host_base_url=host_base_url,
               max_tokens=8192,
               temperature=0,
               verbose=False)

prompt_template = '''分析给定Question，提取Question中包含的KeyWords，输出列表形式

Examples:
Question: 达梦公司在过去三年中的流动比率如下：2021年：3.74倍；2020年：2.82倍；2019年：2.05倍。
KeyWords: ['过去三年', '流动比率', '2021', '3.74', '2020', '2.82', '2019', '2.05']

----------------
Question: {question}'''

llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt_template))


def extract_keys(answer, method='jiaba_kv'):
    """
    提取answer中的关键词
    """
    if method == 'jiaba_kv':
        keywords = jieba.analyse.extract_tags(answer, topK=100, withWeight=False)
    elif method == 'llm_kv':
        keywords_str = llm_chain.run(answer)
        keywords = eval(keywords_str[9:])
    return keywords


def find_lcsubstr(s1, s2):
    m = [[0 for i in range(len(s2) + 1)] for j in range(len(s1) + 1)]
    mmax = 0
    p = 0
    for i in range(len(s1)):
        for j in range(len(s2)):
            if s1[i] == s2[j]:
                m[i + 1][j + 1] = m[i][j] + 1
                if m[i + 1][j + 1] > mmax:
                    mmax = m[i + 1][j + 1]
                    p = i + 1
    return s1[p - mmax:p], mmax


def match_score(chunk, keywords):
    """
    去重后的keywords，被chunk覆盖的比例多少
    """
    hit_num = 0
    # # 精确匹配
    # for keyword in keywords:
    #     if keyword in chunk:
    #         hit_num += 1

    # 模糊匹配，关键词2/3以上被包含
    for keyword in keywords:
        res = find_lcsubstr(keyword, chunk)
        if res[1] >= 2 / 3 * len(keyword):
            hit_num += 1
    return hit_num / len(keywords)


def sort_and_filter_all_chunks(answer, all_chunks, thr=0.0):
    """
    1. answer提取关键词，并进行去重处理
    2. 计算关键词被chunk的覆盖比例（=matched_key_num / all_key_num），依次计算每一个chunk
    3. 按照覆盖比例从高到低，对chunk进行排序
    4. 过滤掉覆盖比例小于阈值Thr的chunk，同时至少保留一个chunk（防止阈值过高，把所有的chunk都过滤掉了）
    """
    keywords = extract_keys(answer)
    keywords = set(keywords)

    chunk_match_score = []
    for index, chunk in enumerate(all_chunks):
        chunk_match_score.append(match_score(chunk, keywords))

    sorted_res = sorted(enumerate(chunk_match_score), key=lambda x: -x[1])
    print(sorted_res)
    remain_chunks = [all_chunks[elem[0]] for elem in sorted_res if elem[1] >= thr]
    if not remain_chunks:
        remain_chunks = [all_chunks[sorted_res[0][0]]]

    return remain_chunks


answer = '达梦公司在过去三年中的流动比率如下：2021年：3.74倍；2020年：2.82倍；2019年：2.05倍达梦公司的流动比率在过去三年中呈现上升的趋势。'
all_chunks = [
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-314 产为主： 2019至2021年度，流动资产占资产总额的比例分别为 90.39%、90.02%\n和91.47%。 \n（一）流动资产分析  \n报告期各期末公司流动资产构成情况如下：  \n单位：万元  \n项目  2021.12.31  2020.12.31  2019.12.31  \n金额  占比  金额  占比  金额  占比  \n货币资金   77,385.97  64.88%  53,601.19  65.20%  33,538.06  61.53%  \n应收票据   696.15  0.58%   2,022.52  2.46%   1,581.51  2.90%  \n应收账款   32,103.09  26.91%  14,023.95  17.06%   8,750.07  16.05%  \n应收款项融资   111.70  0.09%   400.98  0.49%   265.69  0.49%',
    '筹资活动现金流出小计  3,360.50  3,890.85  6,286.03  \n筹资活动产生的现金流量净额  -3,360.50  -2,390.73  15,013.97  \n四、汇率变动对现金及现金等价物\n的影响  - - - \n五、现金及现金等价物净增加额  6,933.83  5,339.97  23,153.52  \n  加：期初现金及现金等价物余额  35,715.86  30,375.89  7,222.37  \n六、期末现金及现金等价物余额  42,649.69  35,715.86  30,375.89  \n注：2021年度公司取得投资收益 收到的现金为取得子公司上海达梦数据库派发的 2020年度\n的现金红利 。',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-330 报告期内，公司流动资产周转率、总资产周转率 整体高于同行业可比公司。  \n十三、偿债能力、流动性及持续经营能力分析  \n（一）负债构成及主要负债项目变动分析  \n报告期各期末 ，公司流动负债和非流动负债金额及占总负债的比例情况如下：  \n单位：万元  \n项目  2021.12.31  2020.12.31  2019.12.31  \n金额  占比  金额  占比  金额  占比  \n流动负债   31,904.73  83.00%   29,127.21  68.37%   26,603.60  88.75%  \n非流动负债   6,532.79  17.00%   13,473.00  31.63%   3,371.38  11.25%  \n负债合计   38,437.5 3  100.00%   42,600.2 2  100.00%   29,974.98  100.00%',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-319 账龄  2021.12.31  2020.12.31  2019.12.31  \n金额  比例  金额  比例  金额  比例  \n1年以内  29,653.44  85.14%  12,896.16  83.17%  7,705.06  80.03%  \n5年以上   322.64  0.93%   142.09  0.92%   88.64  0.92%  \n账面余额  34,830.81  100.00%  15,504.9 2  100.00%  9,627.9 0  100.00%  \n减：坏账准备  2,727.72   1,480.9 6  877.8 3  \n账面价值  32,103.09   14,023.9 5  8,750.07   \n报告期各期末， 公司账龄在 1年以内的应收账款占 按账龄组合计提预期信用\n损失的应收账款总额的比例分别为 80.03%、83.17%和85.14%，整体账龄较短。',
    '2008年4月14日，湖北华丰会计师事务有限公司出具《验资报告》 （鄂华\n丰验报字【 2008】第 291号） ，载明： “截至 2008年4月14日，达梦有限变更后\n的累计注册资本实收金额为人民币 2400万元。” \n2008年6月30日，达梦有限办理了变更登记手续。  \n本次增资后，达梦有限经工商登记的股权结构如下表所示：  \n单位：万元 \n序号  股东名称  出资额  持股比例（ %） \n1 冯裕才  1,116.20  46.51  \n2 华科产业集团  400.00  16.67  \n3 火炬投资  400.00  16.67  \n4 韩朱忠  101.00  4.21 \n5 王元珍  93.30  3.88 \n6 吴恒山  86.00  3.58',
    '2、偿债能力对比情况  \n报告期各期末，公司与可比公司的偿债能力指标比较如下：  \n项目  名称  2021.12.31  2020.12.31  2019.12.31  \n流动比率  中望软件   12.11  3.71 4.81 \n星环科技   4.33  7.02 7.05 \n金山办公   3.83  5.63 9.19 \n平均值   6.76   5.45   7.02  \n本公司   3.74   2.82   2.05  \n速动比率  中望软件   12.10  3.70 4.81 \n星环科技   4.10  6.79 6.79 \n金山办公   3.83  5.62 9.19 \n平均值   6.68   5.37  6.93  \n本公司   3.59   2.56   1.76  \n资产负债率  中望软件  9.78%  27.82%  23.40%  \n星环科技  27.79 % 17.80%  15.64%  \n金山办公  25.37%  19.04%  11.33%',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-337 （4）其他非流动负债  \n报告期各期末， 公司其他非流动负债金额分别为 0万元、 147.88万元和 53.43\n万元，占非流动负债比例分别为 0.00%、1.10%和0.82%，均为一年以上的驻场\n服务合同负债 。 \n（二）偿债能力分析  \n1、主要偿债指标情况  \n报告期各期末，公司主要偿债指标情况如下：  \n项目  2021.12.31/2021 年度  2020.12.31/2020 年度  2019.12.31/2019 年度  \n流动比率（倍）   3.74   2.82   2.05  \n速动比率（倍）   3.59   2.56   1.76  \n资产负债率（合并）  29.47%  46.65%  49.71%  \n注：流动比率 =流动资产 /流动负债；  \n速动比率 =（流动资产 -存货） /流动负债 ； \n资产负债率 =总负债 /总资产； \n报告期内，公司短期偿债能力逐年提 升。',
    '的关系  承担发行人部分销售及售后服务工作， 属于发行人主营业务范畴。  \n（2）最近一年主要财务数据  \n最近一年，北京达梦的主要财务数据（依据中天运会计师审计的发行人合并\n财务报告）如下：  \n单位：万元  \n期间  总资产  净资产  净利润  \n2021.12.31/2021 年度  4,848.37  2,092.91  1,154.39  \n2、上海达梦数据库  \n（1）基本情况  \n公司名称  上海达梦数据库有限公司  \n成立时间  2001 .12.3 \n法定代表人  冯裕才  \n注册资本  6,800.00万元  \n实收资本  6,800.00万元  \n注册地  中国（上海）自由贸易试验区博霞路 50号201室',
    '限合伙）为防止银行账户长期无流水而变更为不动户，向蜀天梦图借款 0.10万\n元，该款项已于 2022年1月24日归还蜀天梦图。  \n2）2019年12月，冯裕才归还了报告期前（ 2013年）发生的 冯裕才等高管\n往来款项 600.00万元，并支付了相应的利息 246.57万元。  \n报告期内，发行人已加强和规范资金管理，进一步强化管理层及财务部门合\n规意识，有效保护公司、股东和其他利益相关人的合法权益。  \n（2）其他关联交易  \n1）2021年1月和 2021年5月，发行人 高级管理人员 付铨、周淳分别从华\n中科技大学办理离岗创业手续，由华中科技大学代为支付其社保、公积金费用。\n2021年度，公司向华中科技大学支付其为付铨、周淳代付的社保、公积金共计\n18.09万元。  \n2）2021年度，上海达梦数据库收到上海市经济信息化委关于 2020年度软\n件和集成电路企业设计人员专项奖励资金。根据相关 政策，上海达梦数据库需将\n专项奖励资金全部支付给受奖励的公司员工。截至 2021年末，公司应向韩朱忠',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-221 项目  2021年度  2020年度  2019年度  \n筹资活动现金流入小计  - 4,545.12  21,690.00  \n  偿还债务支付的现金  1,500.00  3,500.00  6,000.00  \n  分配股利、利润或偿付利息支付的\n现金  1,444.40  390.85  286.03  \n    其中：子公司支付给少数股东的\n股利、利润  - - - \n  支付其他与筹资活动有关的现金  836.82  300.00  691.00  \n筹资活动现金流出小计  3,781.22  4,190.85  6,977.03  \n筹资活动产生的现金流量净额  -3,781.22  354.27  14,712.97  \n四、汇率变动对现金及现金等价物的\n影响     \n五、现金及现金等价物净增加额  23,849.19  21,275.70  23,297.41',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-328 价值分别为 349.49万元、 250.14万元， 占非流动资产比例分别为 3.84%和2.25%，\n具体情况如下：  \n单位：万元  \n项目  2021.12.31  2020.12.31  2019.12.31  \n长期合同资产账面余额  311.88  403.93  - \n减：资产 减值准备  61.73  54.44  - \n长期合同资产账面价值  250.14  349.49  - \n（三）资产周转能力分析  \n1、资产周转能力情况  \n报告期内，公司资产周转指标如下：  \n项目  2021年度  2020年度  2019年度  \n应收账款周转率（次）   2.95   3.58   3.26  \n存货周转率（次）   1.13   0.57   0.87  \n流动资产周转率（次）   0.74   0.66   0.73  \n总资产周转率（次）   0.67   0.59   0.66',
    '现金及现金等价物净增加额  23,849.19  21,275. 70 23,297.41  \n1、经营活动的现金流量  \n报告期内公司经营活动现金流量情况如下：  \n单位：万元  \n项目  2021年度  2020年度  2019年度  \n金额 /比率  增长率  金额 /比率  增长率  金额 /比率  \n销售商品、提供劳务收到的现\n金 64,495.89  42.62%  45,220.74  37.95%  32,780.25  \n营业收入  74,300.01  65.04%  45,020.09  49.26%  30,161.93  \n销售商品、提供劳务收到的现\n金/营业收入  86.80%  -13.58%  100.45%  -7.58%  108.68%  \n经营活动产生现金流量净额  28,304.91  11.05%  25,488.01  153.56%  10,052.1 5 \n净利润  43,844.23  204.59%  14,394.51  71.88%  8,374.61  \n经营活动产生的现金流量净额',
    '2020年度   1,026.01   2,211.28   894.97   2,342.31  \n2019年度   259.97   912.02   145.98   1,026.01  \n增值税  2021年度   2,617.40    8,608.69    8,093.64   3,132.45  \n2020年度   1,087.98   4,520.04   2,990. 61   2,617.40  \n2019年度   1,234.20   2,939.21   3,085.43   1,087.98  \n报告期内发行人税收政策的变化及税收优惠对发行人的影响情况参见本节\n“八、主要税项 ”。 \n十二、资产质量分析  \n报告期各期末公司流动资产和非流动资产金额及占总资产的比例情况如下：  \n单位：万元  \n项目  2021.12.31  2020.12.31  2019.12.31  \n金额  占比  金额  占比  金额  占比  \n流动资产  119,282.46  91.47%  82,215.23  90.02%  54,503.54  90.39%',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-275 财务指标  2021年度  2020年度  2019年度  \n无形资产占净资产的比例  1.52%  2.85%  0.06%  \n注：上述财务指标计算公式如下：  \n1、流动比率 =流动资产 /流动负债  \n2、速动比率 =（流动资产 -存货） /流动负债  \n3、资产负债率 =总负债 /总资产  \n4、应收账款周转率 =营业收入 /应收账款平均余额  \n5、存货周转率 =营业成本 /存货平均余额  \n6、息税折旧摊销前利润 =利润总额 +利息支出 -利息收入 +固定资产折旧 +无形资产摊销 +长期\n待摊费用摊销  \n7、研发费用占营业收入的比例 =研发费用 /营业收入  \n8、每股经营活动产生的现金流量 =经营活动产生的现金流量净额 /期末股本总额  \n9、每股净现金流量 =现金及现金等价物净增加额 /期末股本总额  \n10、归属于发行人股东的每股净资产 =归属于发行人股东权益 /期末股本总额',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-342 项目  2021年度  2020年度  2019年度  \n筹资活动现金流出小计   3,781.22   4,190.85   6,977.03  \n筹资活动产生的现金流量净额   -3,781.22   354.27   14,712.97  \n报告期，公司筹资活动产生的现金流量净额分别为 14,712.97 万元、 354.27\n万元和 -3,781.22万元。 公司筹资活动产生的现金流入主要为取得借款及吸收投资\n等获得的现金。公司筹资活动产生的现金流出主要为偿还债务支付、分配股利、\n利润或偿付利息等支付的现金。  \n2019年度，公司吸收投资收到的现金 主要为公司收到的增资款，具体参见\n本招股说明书 “第五节  发行人基本情况 ”之“三、发行人报告期内的股本和股\n东变化情况 ”之“（二）报告期初以来发行人股本及股东变化情况 ”之“2、2019',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-338 项目  名称  2021.12.31  2020.12.31  2019.12.31  \n平均值  20.98 % 21.55%  16.79%  \n本公司  29.47%  46.65%  49.71%  \n数据来源：可比公司招股说明书、定期报告。  \n报告期内，公司流动比率和速动比率低于可比公司均值，资产负债率高于可\n比公司均值。但总体来说，上述指标符合行业特点，并保持在正常区间。  \n报告期各期，公司流动比率和速动比率 与同行业可比公司相比 较低，主要原\n因包括： （ 1）除软件产品使用授权业务外， 公司也经营数据及行业解决方案业务，\n报告期各 期，该类业务占公司主营业务收入总额比例分别为 28.95%、15.03%和\n11.43%。数据及行业解决方案项目实施周期较长，而针对该类业务，公司在项目\n验收时一次性确认收入并结转成本， 项目实施过 程中收到的客户付款均确认为预',
    '存货周转率（次 /年）   1.13   0.57   0.87  \n息税折旧摊销前利润（万元）  49,189.85 16,525.92 9,156.98 \n归属于发行人股东的净利润（万元）  44,350.82  14,941.19 8,936.12  \n归属于发行人股东扣除非经常性损益后\n的净利润（万元）  34,802. 43 13,163.38 7,754.46  \n研发费用占营业收入的比例  15.86%  21.46%  20.74%  \n每股经营活动产生的现金流量（元）   4.97   4.47   1.76  \n每股净现金流量（元）  4.18  3.73  4.09  \n财务指标  2021.12.31  2020.12.31  2019.12.31  \n流动比率（倍）   3.74   2.82   2.05  \n速动比率（倍）   3.59   2.56   1.76  \n资产负债率（母公司口径）  27.81%  52.68%  47.98%  \n资产负债率（合并口径）  29.47%  46.65%  49.71%',
    '武汉达梦数据库股份有限公司                                                 招股说明书 （申报稿）  \n1-1-428 序号  显名股东  实际持股人  持有股权  \n41 黄清  4.6 \n42 韩朱忠  韩朱忠  100 \n43 赵帅杰  赵帅杰  45 \n44 赵维义  赵维义  13.75  \n45 邹畹珍  邹畹珍  13.75  \n46 王元珍  王元珍  71 \n47 吴恒山  吴恒山  71 \n48 周淳  周淳  30 \n49 周英飚  周英飚  30 \n50 范晶  范晶  10 \n51 刘少鸿  刘少鸿  5 \n52 刘牧心  刘牧心  2.5 \n53 刘嘉西  刘嘉西  2.5 \n合计  1,533.77  \n注1：实际持股人章涛于 2015年10月去世，其持有的发行人股权全部由其子章文谦继承。  \n注2： 实际持股人吴永英于 2013年2月去世， 其持有的发行人权全部由其配偶别朝霞继承。  \n（三）股权代持的解除  \n2018年5月以来，实际持股人通过变更为梦裕科技的有限合伙人或股权转',
]
remain_chunks = sort_and_filter_all_chunks(answer, all_chunks)
